import { ref } from 'vue'
import { defineStore } from 'pinia'

export interface UserInfo {
  id?: number
  name?: string
  nickname?: string
  avatar?: string
  token?: string
  userType?: 'user' | 'doctor'
  [key: string]: any
}

export const useAuthStore = defineStore(
  'auth',
  () => {
    // 用户信息
    const userInfo = ref<UserInfo>({})
    // token
    const token = ref('')
    // 用户类型
    const userType = ref<'user' | 'doctor' | ''>('')

    // 设置用户信息和token
    function setUserInfo(info: UserInfo) {
      // 防止info为undefined或null
      if (!info) {
        console.error('设置用户信息失败：info为空')
        return
      }

      userInfo.value = info
      // 确保token存在再设置
      if (info.token) {
        token.value = info.token
      } else {
        console.warn('用户信息中没有token')
      }
    }

    // 设置用户类型
    function setUserType(type: 'user' | 'doctor') {
      userType.value = type
    }

    // 设置token
    function setToken(newToken: string) {
      token.value = newToken
    }

    // 清除用户信息和token
    function clearAuth() {
      userInfo.value = {}
      token.value = ''
      userType.value = ''
    }

    // 判断用户是否已登录
    function isLoggedIn() {
      return !!token.value
    }

    return {
      userInfo,
      token,
      userType,
      setUserInfo,
      setUserType,
      setToken,
      clearAuth,
      isLoggedIn
    }
  },
  {
    // 开启持久化
    persist: true
  }
)
